package asignacionDeRevisores;

import callForPapers.*;
import sistema.*;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class AsignacionPorAlta extends AsignacionDeRevisores {
    // private Usuario auxiliar;
    // private int salida = 1;
    /**
     * @param revisores
     * @return Devuelve la lista de revisores dada, ordenada por Fecha de Alta
     *         en el Sistema.
     */
    public List<Usuario> ordenarRevisoresPorFechaDeAlta(List<Usuario> revisores) {
	Collections.sort(revisores, new Comparator<Usuario>() {
	    public int compare(Usuario usuarioUno, Usuario usuarioDos) {
		if (usuarioUno.getFecha() == null
			|| usuarioDos.getFecha() == null)
		    return 0;
		return usuarioUno.getFecha().compareTo(usuarioDos.getFecha());
	    }
	});
	return revisores; // Si la lista es vacia, devuelve una lista vacia.
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * asignacionDeRevisores.AsignacionDeRevisores#asignarRevisores(callForPapers
     * .CallForPaper)
     */
    public void asignarRevisores(CallForPaper cfp) {
	// Convierto los set en List:
	List<Usuario> listaRevisores = this.ordenarRevisoresPorFechaDeAlta(this
		.obtenerListaDeRevisores(cfp));
	List<Paper> papers = (List<Paper>) this.obtenerListaDePapers(cfp);
	// Uso el metodo de la superclase:
	super.asignarPapersARevisores(listaRevisores, papers);
    }
}
